<!DOCTYPE html>
<html lang="zh-cn">
  <head>
    <meta charset="UTF-8">
    <title>Sucha's Blog - Archive for September, 2015</title>
    <meta name="generator" content="MarkdownProjectCompositor.lua">
    <meta name="author" content="Sucha">
    <meta name="keywords" content="suchang, programming, Linux, Lua">
    <meta name="description" content="Sucha's blog">
    <link rel="shortcut icon" href="../images/ico.png">
    <link rel="stylesheet" type="text/css" href="../styles/blog.css">
    <link rel="stylesheet" type="text/css" href="../styles/prism.min.css">
    <style id="site_theme"></style>
  </head>
  <body>
    <div id="body">
      <div id="text">
	   <!-- Page published by cmark-gfm begins here --><h1>Sucha's Blog ~ Archive for September, 2015</h1>
<p><a id="p0"></a></p>
<div class="date">15年9月15日 周二 23:40</div>
<h2>Cross platform HTTP server</h2>
<p>这个开源的跨平台的小型 HTTP 服务端已经正式用在了公司内部产品上，地址是
<a href="https://github.com/lalawue/m_http_server">https://github.com/lalawue/m_http_server</a>.</p>
<p>支持浏览器端通过 HTTP 访问设备上面的内容，上传下载都是现成的。</p>
<p>各目录下的小 demo 展示在 iOS/MacOS/Linux/Windows 平台下面的使用方式。实
际上，只要有 socket 接口，以及支持 C99 的编译器，这套玩意儿就能跑起来。</p>
<p>因为所有代码都是用 C 实作的，底层是跨平台的 select 构造的消息循环，内部
的封装是支持 TCP 跟 UDP 的 IPV4。</p>
<p>这个项目最早只是一个跨平台的 socket 接口，用于之前的游戏上面，跑自定义的
二进制流，后来年初尝试着用它搭建一个 HTTP 下载器，不了了之。实话说，用 C
写处理 HTTP 确实蛋疼，其实应该用 C++ 的，C++ 跨平台也 OK，当然问题是我不
熟 C++。</p>
<p>后来因为有这方面的需要，慢慢发展成为了 HTTP 服务器，倒也能用，只是问题比
较多，趁着用在了公司的内部产品上面，做了一些修改，慢慢完善并稳定下来。</p>
<p>现在用 ObjC 比较多，面对古老的 C，是感觉 C 缺乏闭包，以及用于惰性计算的
block，相当致命，实在是完全不应该用来开发应用程序了。C 用来控制硬件，给
硬件同仁在这方面使用就好了。</p>
<p>从 socket、select 开始搭建系统，蛮开心的。</p>
<div class="category"><a href="CategoryProgramming.html">CategoryProgramming</a> / <a href="2015-09.html#p0">Permalink</a> / <a href="https://github.com/lalawue/homepage/discussions/categories/blog" target="_blank">Discussion</a></div>
<!-- date: 2015-09-15T23:40:10+0800 -->
<!-- Page published by cmark-gfm ends here -->
  <div id="foot">2004-<script>var d = new
	Date();document.write(d.getFullYear())</script> &copy;
	Sucha. Powered by MarkdownProjectCompositor.
  </div>
  </div><!-- text -->
  <div id="sidebar">
  </div><!-- sidebar -->
  <script src="../js/prism.min.js" async="async"></script>
  <script src="../js/blog_sidebar.js"></script>
  </div> <!-- body -->
</body>
</html>